package comm

import (
	"app-webapi/comm/g"
	"app-webapi/entity/dto"
)

func CheckPagination(pagination *dto.Pagination) {
	// 校验参数
	if pagination.Limit < 0 {
		pagination.Limit = 10
	}

	if pagination.Limit > 30 {
		pagination.Limit = 30
	}

	if pagination.Page < 1 {
		pagination.Page = 1
	}

	if len(pagination.Sort) == 0 {
		pagination.Sort = "created_at desc"
	}
}

// RestPage 分页查询
// page  设置起始页、每页条数,
// name  查询目标表的名称
// query 查询条件,
// dest  查询结果绑定的结构体,
// bind  绑定表结构对应的结构体
func RestPage(page Page, name string, query interface{}, dest interface{}, bind interface{}) int64 {
	if page.PageNum > 0 && page.PageSize > 0 {
		offset := (page.PageNum - 1) * page.PageSize
		g.Db.Offset(offset).Limit(page.PageSize).Table(name).Where(query).Find(dest)
	}
	return g.Db.Table(name).Where(query).Find(bind).RowsAffected
}

// RestPagePreload 分页查询
// page  设置起始页、每页条数,
// name  查询目标表的名称
// query 查询条件,
// dest  查询结果绑定的结构体,
// bind  绑定表结构对应的结构体
// prod   关联关系
func RestPagePreload(page Page, name string, query interface{}, dest interface{}, bind interface{}, prod string) int64 {
	if page.PageNum > 0 && page.PageSize > 0 {
		offset := (page.PageNum - 1) * page.PageSize
		g.Db.Offset(offset).Limit(page.PageSize).Table(name).Preload(prod).Where(query).Find(dest)
	}
	return g.Db.Table(name).Where(query).Find(bind).RowsAffected
}
